<?php
//载入设置菜单,添加设置信息
if (!class_exists('WPCY_Admin_Config')) {
    class WPCY_Admin_Config
    {
        //选项
        public static $option = "wpcy_object_option";

        public static $plugin_name; //插件名
        public static $plugin_version; //插件版本

        public static function run($name, $version)
        {
            //传值
            self::$plugin_name = $name;
            self::$plugin_version = $version;
            //添加菜单
            add_action('admin_menu', array(__CLASS__, 'wpcy_menu'));

            //加载 CSS 和 JS 资源
            add_action('admin_enqueue_scripts', array(__CLASS__, 'load_admin_script'));



            // 添加Ajax请求处理函数
            add_action('wp_ajax_save_object_option', array(__CLASS__, 'save_object_option_callback'));
        }
        //创建菜单
        public static function wpcy_menu()
        {
            // 添加一个菜单到 WordPress 后台的“设置”菜单下
            add_submenu_page(
                'plugins.php',
                'WP China Yes',
                'WPCS',
                'administrator',
                'wpcy_seting',
                array(__CLASS__, 'menu_displays'),
                '200.1'
            );
        }

        public static function menu_displays()
        {
?>
            <div class="wrap">

                <!--标题-->
                <h2><?php echo esc_html(get_admin_page_title()); ?></h2>
                <div id='root'></div>
            </div>
<?php

        }
        /**
         * 加载资源
         */
        public static function load_admin_script($hook)
        {



            $ver = self::$plugin_version;
            $name = self::$plugin_name;
            //是否是指定页面
            if ('plugins_page_wpcy_seting' != $hook) {
                return;
            }

            //对js文件进行module接入
            add_filter('script_loader_tag', array(__CLASS__, 'refund_type_script'), 10, 2);




            //准备地址
            $index_css = plugin_dir_url(dirname(__DIR__)) . 'vite/dist/index.css';
            $index_js = plugin_dir_url(dirname(__DIR__)) . 'vite/dist/index.js';

            wp_enqueue_style($name, $index_css, array(), $ver, false);
            wp_enqueue_script($name, $index_js, array(), $ver, true);


            $pf_api_translation_array = array(
                'option' => get_option(self::$option), //传递选项
            );
            wp_localize_script($name, 'dataLocal', $pf_api_translation_array); //传给vite项目
        }

        //对js文件进行module接入
        public static function refund_type_script($tag, $handle)
        {
            // 在这里判断需要添加 type 属性的 JS 文件，比如文件名包含 xxx.js
            if (strpos($tag, 'index.js') !== false) {
                // 在 script 标签中添加 type 属性
                $tag = str_replace('<script', '<script type="module"', $tag);
            }
            return $tag;
        }

        /**
         * 添加选项保存接口
         */
        public static  function save_object_option_callback()
        {

            // 获取通过 Ajax POST 请求传递的对象数据
            $object_data = $_POST['object_data'];

            // 将 JSON 字符串解析为 PHP 对象
            $object = json_decode(stripslashes($object_data));

            // 保存设置选项
            update_option(self::$option, $object);

            // 发送成功响应
            $response = array(
                'message' => '设置选项已保存！',
                'object' => $object,
            );



            // 使用 wp_send_json 函数发送 JSON 响应，避免汉字转义
            wp_send_json($response, 200, JSON_UNESCAPED_UNICODE);
        }
        /**
         * 提供选项
         */
        public static function get_seting($option)
        {
            //拿到选项值
            $config = get_option(self::$option);
            $value =  self::get_config($config, $option);
            return $value;
        }
        /**
         * 从对象中获取属性值
         *
         * @param object $config 对象
         * @param string $property 从对象中获取的属性名
         * @param string $defaultValue 默认值（可选）
         * @return mixed 属性值或默认值
         */
        public static function get_config($config, $property, $defaultValue = false)
        {
            /**
             * 是否是对象
             * 对象中是否有此键名
             * 在对象中的此值是否为空
             */
            if (is_object($config) && property_exists($config, $property) && !empty($config->$property)) {
                return $config->$property;
            } else {
                //不存在则输出默认值
                return $defaultValue;
            }
        }
    } //end
}
